/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.pucp.dp1.lectura.modelo;

import java.io.IOException;
import java.util.ArrayList;
import java.sql.Time;
import java.util.Scanner;

/**
 *
 * @author Ed
 */
public class RutaCar {
    public Time inicio;//inicio de la ruta (segun los archivos de lectura)
    public ArrayList<CoordCar> ptosCar = new ArrayList<>();//conjunto de puntos que conforman la ruta (cada uno tiene un intervalo segundo a segundo)
    public boolean culminado;// ruta culminada en simulacion
    public CoordCar posActual;//coordenada actual (ojo q no actual leida sino actual en simulacion)
    public int indexPosActual;//indice de coordenada actual (ojo q no actual leida sino actual en simulacion)

    public RutaCar(){}
    
    public RutaCar(Time ini, Scanner scan)
    {
        this.setInicio(ini);
        setCulminado(false);
        setPosActual(null);//para saber que aun no se a iniciado la ruta
        setIndexPosActual(-1);//para saber que aun no se a iniciado la ruta
        scan.useDelimiter("[,|\\*]");
        CoordCar pos = new CoordCar();
        while(scan.hasNext()){
            int xxx= Integer.parseInt(scan.next());
            int yyy= Integer.parseInt(scan.next());
            pos = new CoordCar(xxx,yyy);
//            System.out.println(scan.next()+" - "+scan.next());
            ptosCar.add(pos);
        }                
    }
    
    public CoordCar getSgtePto(boolean marcarComoLeido)
    {
        CoordCar sgtePto=null;        
        if(!isCulminado())
        {
            sgtePto= new CoordCar();                    
            int nuevoIndex=getIndexPosActual()+1;
            sgtePto = getPtosCar().get(nuevoIndex);
            if(getPosActual()==null)
            {
                if(getPtosCar().size()>0)
                {
                    nuevoIndex=0;
                    sgtePto = getPtosCar().get(nuevoIndex);
                }
                else
                    sgtePto=null;
            }
            if(marcarComoLeido)
            {
                setIndexPosActual(nuevoIndex);
                setPosActual(getPtosCar().get(nuevoIndex));
                getPtosCar().get(nuevoIndex).setLeido(marcarComoLeido);
                if(nuevoIndex>=(getPtosCar().size()-1))
                    setCulminado(marcarComoLeido);
            }
        }        
        return sgtePto;        
    }    

    public Time getInicio() {
        return inicio;
    }

    public void setInicio(Time inicio) {
        this.inicio = inicio;
    }

    public ArrayList<CoordCar> getPtosCar() {
        return ptosCar;
    }

    public void setPtosCar(ArrayList<CoordCar> ptosCar) {
        this.ptosCar = ptosCar;
    }

    public boolean isCulminado() {
        return culminado;
    }

    public void setCulminado(boolean culminado) {
        this.culminado = culminado;
    }

    public CoordCar getPosActual() {
        return posActual;
    }

    public void setPosActual(CoordCar posActual) {
        this.posActual = posActual;
    }

    public int getIndexPosActual() {
        return indexPosActual;
    }

    public void setIndexPosActual(int indexPosActual) {
        this.indexPosActual = indexPosActual;
    }    
}
